﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez.Produccion.Compras;
using Tecnopez.Globals;
using System.Collections.Generic;
using BussinessLogicTecnoPez.Tipos_Comunes;
using BussinessLogicTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation;

namespace TecnoPezWeb.Modules.Compras
{
    public partial class ABMProveedores : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.Page.IsPostBack)
            {
                SetMode(PageMode.ListMode);
            }

            TPPTipoDocumento.ObjType = typeof(TipoDocumento);

            InicializarValidadores();
            InicializarGrilla();

            cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

            GenericMasterPage master = (GenericMasterPage)this.Master;
            master.Imagen = "../Styles/Icons/empleados.gif";
            master.Titulo = "Gestión de Proveedores";
            cargarGrilla();
            _lblError.Text = "";
        }

        private void InicializarValidadores()
        {
            PPVRazonSocial.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.Proveedor";
            PPVRazonSocial.ControlToValidate = "txtRazonSocial";
            PPVRazonSocial.PropertyName = "RazonSocial";
            PPVRazonSocial.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVCodigo.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.Proveedor";
            PPVCodigo.ControlToValidate = "txtCodigo";
            PPVCodigo.PropertyName = "Codigo";
            PPVCodigo.DisplayMode = ValidationSummaryDisplayMode.List;
        }

        private void InicializarGrilla()
        {
            DataControlField[] d = new DataControlField[1];

            ImageField colC = new ImageField();
            //colC.ButtonType = ButtonType.Image;
            //colC.CommandName = "mail";
            colC.DataImageUrlField = "idProveedor";
            colC.HeaderText = "Email";
            colC.HeaderStyle.Width = 5;
            colC.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
            d[0] = colC;

            grdProveedores.setupGrid<Proveedor>(cargarGrilla, seleccionarUsuario, grdDatosAbmView_RowDataBound, true, d, this.ViewState);
        }

        private void seleccionarUsuario(int o)
        {
            int IdProveedor = int.Parse(grdProveedores.grdDatosAbmView.DataKeys[o].Value.ToString());
            Proveedor.getManager.ClearFilters();
            Proveedor.getManager.AddFilter("IDPROVEEDOR", GenericManager<Proveedor>.filterOperator.Equals, IdProveedor);
            Proveedor objProveedor = Proveedor.getManager.GetOne();
            txtId.Text = objProveedor.IdProveedor.ToString();
            txtRazonSocial.Text = objProveedor.RazonSocial.Trim();
            txtCodigo.Text = objProveedor.Codigo.Trim();
            txtNumeroDocumento.Text = objProveedor.NumeroDocumento.ToString();
            txtDireccion.Text = objProveedor.Direccion.Trim();
            txtCorreoElectronico.Text = objProveedor.CorreoElectronico.Trim();
            txtTelefono.Text = objProveedor.Telefono.Trim();

            if (objProveedor.TipoDocumento != null)
                TPPTipoDocumento.ItemSelected = objProveedor.TipoDocumento;
            else
                TPPTipoDocumento.ItemSelected = null;

            SetMode(PageMode.ViewMode);
        }

        private void SetMode(PageMode mode)
        {
            ViewState["PageMode"] = mode;
            switch (mode)
            {
                case PageMode.ListMode:
                    wzrABM.ActiveStepIndex = 0;
                    break;
                case PageMode.NewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtId.Enabled = false;
                    txtRazonSocial.Enabled = true;
                    txtNumeroDocumento.Enabled = true;
                    TPPTipoDocumento.Enable = true;
                    txtTelefono.Enabled = true;
                    txtDireccion.Enabled = true;
                    txtCorreoElectronico.Enabled = true;
                    txtCodigo.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.EditMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtId.Enabled = false;
                    txtRazonSocial.Enabled = true;
                    txtNumeroDocumento.Enabled = true;
                    TPPTipoDocumento.Enable = true;
                    txtTelefono.Enabled = true;
                    txtDireccion.Enabled = true;
                    txtCorreoElectronico.Enabled = true;
                    txtCodigo.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.ViewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtId.Enabled = false;
                    txtRazonSocial.Enabled = false;
                    txtNumeroDocumento.Enabled = false;
                    TPPTipoDocumento.Enable = false;
                    txtTelefono.Enabled = false;
                    txtDireccion.Enabled = false;
                    txtCorreoElectronico.Enabled = false;
                    txtCodigo.Enabled = false;
                    cmdAceptar.Visible = false;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = true;
                    cmdEliminar.Enabled = true;
                    break;
            }

        }

        private void cargarGrilla()
        {
            Proveedor.getManager.ClearFilters();
            Proveedor.getManager.ClearOrders();

            Proveedor.getManager.AddFilter("RAZONSOCIAL", GenericManager<Proveedor>.filterOperator.Like, "%" + this.txtBuscarRazonSocial.Text + "%");
            Proveedor.getManager.AddFilter("CODIGO", GenericManager<Proveedor>.filterOperator.Like, "%" + this.txtBuscarCodigo.Text + "%");

            List<Proveedor> lista = new List<Proveedor>();
            lista = Proveedor.getManager.GetFilter();
            grdProveedores.grdDatosAbmView.DataSource = lista;
            grdProveedores.grdDatosAbmView.DataBind();
        }
        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            this.txtId.Text = "";
            this.txtRazonSocial.Text = "";
            this.txtNumeroDocumento.Text = "";
            this.TPPTipoDocumento.ItemSelected = null;
            this.txtCodigo.Text = "";
            this.txtDireccion.Text = "";
            this.txtCorreoElectronico.Text = "";
            this.txtTelefono.Text = "";
            SetMode(PageMode.NewMode);
        }
        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.EditMode);
        }
        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                Proveedor objProveedor = new Proveedor();
                objProveedor.IdProveedor = int.Parse(this.txtId.Text.Trim());
                if (Proveedor.getManager.Delete(objProveedor) < 1)
                {
                    throw Proveedor.getManager.GeneratedException;
                }

                SetMode(PageMode.ListMode);
                cargarGrilla();
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }

        }
        protected void cmdAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Proveedor objProveedor = new Proveedor();
                objProveedor.Codigo = txtCodigo.Text.Trim();
                objProveedor.CorreoElectronico = txtCorreoElectronico.Text.Trim();
                objProveedor.Direccion = txtDireccion.Text.Trim();
                objProveedor.NumeroDocumento = txtNumeroDocumento.Text.Trim();
                objProveedor.RazonSocial = txtRazonSocial.Text.Trim();
                objProveedor.Telefono = txtTelefono.Text.Trim();

                if (TPPTipoDocumento.ItemSelected != null)
                {
                    TipoDocumento objTipoDoc = new TipoDocumento();
                    objTipoDoc = (TipoDocumento)TPPTipoDocumento.ItemSelected;
                    objProveedor.TipoDocumento = objTipoDoc;
                    objTipoDoc = null;
                }

                if (validar(objProveedor))
                {
                    if (getMode() == PageMode.NewMode)
                    {
                        if (Proveedor.getManager.Insert(objProveedor) != true)
                        {
                            throw Proveedor.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ListMode);
                        cargarGrilla();
                    }
                    else
                    {
                        objProveedor.IdProveedor = int.Parse(txtId.Text.Trim());
                        if (Proveedor.getManager.Update(objProveedor) != true)
                        {
                            throw Proveedor.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ViewMode);
                    }
                }
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }
        }
        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }

        private PageMode getMode()
        {
            if (ViewState["PageMode"] == null)
                return PageMode.ModeNotFound;
            return (PageMode)ViewState["PageMode"];
        }

        private bool validar(Proveedor objeto)
        {
            ValidationResults v = Validation.Validate<Proveedor>(objeto);
            if (!v.IsValid)
            {
                _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
            }
            return v.IsValid;

        }

        protected void grdDatosAbmView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            int IndiceEmail = 0;

            for (int celda = 0; celda < grdProveedores.grdDatosAbmView.Columns.Count; celda++)
            {
                if (grdProveedores.grdDatosAbmView.Columns[celda].HeaderText == "Email")
                {
                    IndiceEmail = celda;
                }
            }
            
            if (e.Row.DataItem != null)
            {
                if (e.Row.DataItem is Proveedor)
                {
                    Image img = (Image)e.Row.Cells[IndiceEmail].Controls[0];
                    Proveedor objProveedor = (Proveedor)e.Row.DataItem;
                    if (objProveedor.CorreoElectronico.Trim() != "")
                    {
                        img.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/email.gif";
                        img.ToolTip = objProveedor.CorreoElectronico;
                        img.Style.Add("cursor", "hand");
                        img.Attributes.Add("onclick", "javascript:mail('" + objProveedor.CorreoElectronico + "')");
                    }
                    else
                    {
                        img.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/noemail.gif";
                        img.Attributes.Add("onclick", "return false");
                    }
                }
            }
        }
    }
}